#include "constants.h"
#include "MyPose.h"
#include "MotionModel.h"
#include "SensorModel.h"
#include "OdomMove.h"
#include "library.h"

#ifndef FILTER_H_
#define FILTER_H_

class Filter {
protected:
	double HighestEverConfidence;
	int stepsTaken;
	tf::TransformListener listener;
	bool validParticle(MyPose &pose,MATRIX &map);
	void init();
	tf::Transform publishBestTransform(DDD &BestPose, double confidenceInBestPose,
			const tf::Transform &currentTransform, double overallUncertainity);
	tf::Transform publishBestTransform(MyPose &pose, double confidenceInBestPose,
			const tf::Transform &currentTransform, double overallUncertainity);
public:
	Filter();

	virtual ~Filter();
	virtual tf::Transform reSample(PoseArray &pa,WeightsForPoses &w,MotionModel &mm,
			SensorModel &sm, MATRIX &map, Robot &robot, OdomMove &om, const tf::Transform &currentTransform) = 0;
};

#endif /* FILTER_H_ */
